package com.james.wee.shuangseqiu.killnum;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.james.wee.shuangseqiu.bo.IDBBo;
import com.james.wee.shuangseqiu.bo.OpenNumber;
import com.james.wee.shuangseqiu.db.DB;

public class KillNumberGongshi {

	private static int dirt33(int src) {
		return src > 33 ? src - 33 : src;
	}

	/**
	 * 根据出号大小顺序计算
	 * 
	 * @param open
	 */
	public static List<Integer> gongshiByDaXiaoSort(OpenNumber open) {
		int n1 = Integer.parseInt(open.getN_1());
		int n2 = Integer.parseInt(open.getN_2());
		int n3 = Integer.parseInt(open.getN_3());
		int n4 = Integer.parseInt(open.getN_4());
		int n5 = Integer.parseInt(open.getN_5());
		int n6 = Integer.parseInt(open.getN_6());
		int nblue = Integer.parseInt(open.getN_blue());
		List<Integer> kill = new ArrayList<Integer>();
		// 1 当期开奖号码大小顺序第一位与第六位的差，计算的结果在下一期有可能不出。
		kill.add(dirt33(n6 - n1));
		// 2 当期开奖号码大小顺序第二位与第三位的差，计算的结果在下一期有可能不出。
		kill.add(dirt33(n3 - n2));
		// 3当期开奖号码大小顺序第二位与第五位的差，计算的结果在下一期有可能不出。
		kill.add(dirt33(n5 - n2));
		// 4 当期开奖号码大小顺序第一位乘4再减掉2，计算的结果在下一期有可能不出。
		kill.add(dirt33(n1 * 4 - 2));
		// 5 当期开奖号码大小顺序第一位加当期开奖的蓝号，计算的结果再乘3后，所得的号码在下一期有可能不出。
		kill.add(dirt33((n1 + nblue) * 3));
		// 6 当期开奖号码大小顺序第一位加09，计算的结果在下一期有可能不出。
		kill.add(dirt33(n1 + 9));
		// 7 七，当期开奖号码大小顺序第二位加05，计算的结果在下一期有可能不出。
		kill.add(dirt33(n2 + 5));
		// 8 八，当期开奖号码大小顺序第三位加04，计算的结果在下一期有可能不出。
		kill.add(dirt33(n3 + 4));
		// 9 九，当期开奖号码大小顺序第三位加07，计算的结果在下一期有可能不出。
		kill.add(dirt33(n3 + 7));
		// 10 十，当期开奖号码大小顺序第六位加04，计算的结果在下一期有可能不出。
		kill.add(dirt33(n6 + 4));
		// 11 十一，当期开奖号码大小顺序第四位与第五位的差，加当期的蓝号，再加01，计算的结果在下一期有可能不出。
		kill.add(dirt33((n5 - n4) + nblue + 1));
		// // 十八，当期开奖的蓝号，加当期开奖号码大小顺序第一位，计算的结果在下一期有可能不出。（备注：如遇蓝号重复，重复的蓝号再另外减去01）
		// kill.add(-(nblue+n1)));
		// 12 十九，当期开奖的蓝号，加当期开奖号码大小顺序第二位，再减去01，计算的结果在下一期有可能不出。
		kill.add(dirt33(nblue + n2 - 1));
		// 13 二零，当期开奖的蓝号，减当期开奖号码大小顺序第四位，再加上01，计算的结果在下一期有可能不出。
		kill.add(dirt33(Math.abs(n4 - nblue) + 1));
		// 14 二一，当期开奖的蓝号，减当期开奖号码大小顺序第五位，计算的结果在下一期有可能不出。
		kill.add(dirt33(Math.abs(nblue - n5)));
		// 15 二二，当期开奖的蓝号，乘当期开奖号码大小顺序第一位，计算的结果在下一期有可能不出。
		kill.add(dirt33(nblue * n1));
		// 16 二三，当期开奖的蓝号，加+07，计算的结果在下一期有可能不出。
		kill.add(dirt33(nblue + 7));
		// 17 二四，当期开奖的蓝号，加+09，计算的结果在下一期有可能不出。
		kill.add(dirt33(nblue + 9));
		// 18 二五，当期开奖的蓝号，乘05加+02，计算的结果在下一期有可能不出。
		kill.add(dirt33(nblue * 5 + 2));
		// 19 二六，当期开奖的蓝号，如为偶数时，乘上2，再加02，计算的结果在下一期有可能不出，到目前为止，此条件无错误。14*2+2=30

		// 二七，当期开奖的蓝号，如为奇数时，乘上5，再加+02，计算的结果在下一期有可能不出。
		if (nblue % 2 == 0)
			kill.add(dirt33(nblue * 2 + 2));
		else
			kill.add(dirt33(nblue * 5 + 2));

		// 20 二八，开奖红号按从小到大排序(第三位+第六位)除以33的余数+14,          如果结果大于33,就减去33
		int t = (n3 + n6) % 33 + 14;
		kill.add(dirt33(t));
		return kill;
	}

	public static List<Integer> gongshiByChuQiuSort(OpenNumber open) {
		int n1 = Integer.parseInt(open.getN_1());
		int n2 = Integer.parseInt(open.getN_2());
		int n3 = Integer.parseInt(open.getN_3());
		int n4 = Integer.parseInt(open.getN_4());
		int n5 = Integer.parseInt(open.getN_5());
		int n6 = Integer.parseInt(open.getN_6());
		int nblue = Integer.parseInt(open.getN_blue());
		List<Integer> kill = new ArrayList<Integer>();
		// 十二，当期开奖号码出号顺序第一位与第二位的和，计算的结果在下一期有可能不出。
		kill.add(dirt33(n1 + n2));
		// 十三，当期开奖号码出号顺序第二位与第三位的差，计算的结果在下一期有可能不出。
		kill.add(dirt33(Math.abs((n2 - n3))));
		// 十四，当期开奖号码出号顺序第三位与第五位的差，计算的结果在下一期有可能不出。
		kill.add(dirt33(Math.abs((n5 - n3))));
		// 十五，当期开奖号码出号顺序首尾的差，加当期开奖的蓝号，再减去03，计算的结果在下一期有可能不出。
		kill.add(dirt33(Math.abs((Math.abs((n1 - n6)) + nblue - 3))));
		// 十六，当期开奖号码出号顺序第一位与第三位的差，加当期开奖的蓝号，再加02，计算的结果在下一期有可能不出。
		kill.add(dirt33(Math.abs((n1 - n3)) + nblue + 2));
		// 十七，当期开奖号码出号顺序一位，二位，三位相加的和，加当期开奖的蓝号，再减去01，计算的结果在下一期有可能不出。（备注：如遇蓝号重复，重复的蓝号再另外减去01）
		kill.add(dirt33(n1 + n2 + n3 + nblue - 1));
		return kill;
	}

	public static String gold(OpenNumber open){
		int t = open.getCalcSum()/6;
		int a = (int) (t*0.618);
		int b = (int) (t*0.236);
		int c = (int) (t*0.382);
		return ""+a+" "+(a+1)+" "+(a-1)+" "+b+" "+(b+1)+" "+(b-1)+" "+c+" "+(c+1)+" "+(c-1);
	}
	private static String exists(List<Integer> desc, OpenNumber prev) {
		String[] six = prev.sixRedNum().split(",");
		List<String> list = new ArrayList<String>();
		for (String s : six) {
			int i = Integer.parseInt(s);
			for (Integer c : desc) {
				if (c.intValue()==i && !list.contains(s)) {
					list.add(s);
				}
			}
		}
		return list.toString();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
//			List<IDBBo> list = DB.getInstance().queryBoList(
//					"select * from opennumber order by id desc",
//					OpenNumber.class);
			OpenNumber open = null;
//			OpenNumber prev = null;
//			for (IDBBo bo : list) {
//				open = (OpenNumber) bo;
//				if (null != prev) {
//					List<Integer> l = gongshiByDaXiaoSort(open);
//					String s = exists(l, prev);
//					System.out.println(open.getOpennum() + "==>" + l.toString()
//							+ "==>错误" + s);
////					System.out.println(gold(open));
//				} else {
//					System.out.println(open.getOpennum() + "==>"
//							+ gongshiByDaXiaoSort(open));
////					System.out.println(gold(open));
//				}
//				prev = open;
//			}
			 open = new
			 OpenNumber("2013023","15","07","04","02","20","09","07",57,null,null);
			 System.out.println(open.getOpennum()+"==>"+gongshiByChuQiuSort(open));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
